package hanoi;

import java.util.ArrayList;
import java.util.List;

import aima.search.framework.Successor; 
import aima.search.framework.SuccessorFunction;

public class HanoiSuccessorFunction implements SuccessorFunction{

	@SuppressWarnings("unchecked")
	@Override
	public List getSuccessors(Object state) {
		
		// Creamos la lista donde almacenar los estados sucesores
		List<Successor> successors = new ArrayList<Successor>();
		
		HanoiEstado estadoActual = (HanoiEstado) state;
		
		HanoiEstado nuevoEstado = null;
		
		// Para cada palo fuente...
		for (int fuente=0; fuente < 3; fuente++)
			// ...para cada palo destino...
			for (int destino=0; destino < 3; destino++){
				// ...si es posible mover del palo fuente al palo destino...
				if (estadoActual.esPosibleMover(fuente, destino)){
					// ...se crea un estado nuevo (copia del actual)...
					nuevoEstado = new HanoiEstado(estadoActual);
					// ...se mueve el disco del palo fuente al palo destino...
					nuevoEstado.moverDisco(fuente, destino);
					// ...y se almacena en la lista de sucesores
					successors.add(new Successor("Moviendo de "+fuente+" a "+destino+".", nuevoEstado));
				}			
			}	
		
		return successors;
	}

}
